package simulation.initiatives;

public interface IEngine {
  /**
   * Does one iteration of calculations on the grid
   */
  public void step();
  
  /**
   * Called whenever the start button is pushed
   */
  public void start();
  
  /**
   * Pauses the engine
   */
  public void pause();
  
  /**
   * Resets the engine timer and grid to default settings
   */
  public void reset();
  
  /**
   * Adjusts the display rate of the engine.<br/>
   * This controls different things depending on the initiative type:<br/>
   *    pulling: this controls how often the presentation asks the engine for data<br/>
   *    pushing: this controls how often the engine pushes data to the presentation<br/>
   *    buffers: this controls how often the presentation checks the buffer for the 
   *             latest iteration calculations
   *             
   * @param newRate
   */
  public void adjustDisplayRate(int newRate);
  
  /**
   * Sets the simulation time step chosen by the user
   * @param minutes
   */
  public void setSimTimeStep(int minutes);
}
